# 序列化

import pickle
import json

# os.remove('./dump.txt')

d = dict(name='jzq', age=22)

# pickle.dumps()方法把任意对象序列化成一个bytes，然后，就可以把这个bytes写入文件。
# 或者用另一个方法pickle.dump()直接把对象序列化后写入一个file-like Object
f = open('dump.txt', 'wb')
pickle.dump(d, f)
f.close()

f2 = open('dump.txt', 'rb')
d2 = pickle.load(f2)
f2.close()
print(d2)

# dumps()方法返回一个str，内容就是标准的JSON。类似的，dump()方法可以直接把JSON写入一个file-like Object
# 把JSON反序列化为Python对象，用loads()或者对应的load()方法，前者把JSON的字符串反序列化，后者从file-like Object中读取字符串并反序列化
s = json.dumps(d)
print(s)
json_str = '{"age": 20, "name": "jzq"}'
d2 = json.loads(json_str)
print(d2)


class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age


def stu2dict(stu):
    return {
        "name": stu.name,
        "age": stu.age
    }


def dict2stu(d):
    return Student(d['name'], d['age'])


student = Student('mrx', 18)
s2 = json.dumps(student, default=stu2dict)
s3 = json.dumps(student, default=lambda obj: obj.__dict__)
print(s2)
print(s3)

stu2 = json.loads(json_str, object_hook=dict2stu)
print(stu2.name)
